連載 /C 十十 ADVISOR ー 3 #define NUM_WOMBATS 7 120 ドはバグが少ない。 フ。があれば発見できるはすである。この点で c + + のコー 引数のミスマッチによって惹き起こされるが、プロトタイ のか難しい場合があるからだ。発見か難しいバグの多くは タイフ群の場所を特定 ( 場合によっては新規に作成 ) する ことがある。というのも、ライプラリ関数に対するプロト イルはプロトタイプをしておらす、こオ功墹題になる ンパイルすることができない。 ANSIC 以前のヘッダファ してプロトタイプを要求しているので、それらなしではコ C + + のものを採用している。 c + + は、すべての関数に対 た。実際、 ANSI C のプロトタイプ・シンタックスは、 C + + は、かなり前から関数のプロトタイプをもってい 関数のプロトタイプ は、ほかの去では記述できない。 するマクロ ( 本誌 1990 年 12 月号、、 c Advisor" 参照 ) らない。また、引数の名前の連結や文字列の変形を必要と クロでは、とくに言当しないかぎりこのようなことは起こ 数 abs() はどんな引数も I 。 ng 型に変換してしまう。マ 小魏点数も処理できるだろう。これに対し、インライン関 ない問題もある。たとえば、前出の ABS() マクロは浮動 的に同しものを使っており、マクロでなければ処理でき もちろん、 C + + は ANSI C のプリプロセッサと本質 数式て便利である ) 。 種の定数は、酉リのサイズや case 文のラベルのような定 考えてもよいだろう (ANSI C とは異なり、 c + + のこの カ定される ) 。型をもつ # define 文とはとんど同しと ァイルを複数のソースからインクルードするという使い方 言を繰り返すこともできる ( たとえは、共通のヘッダフ るだろう ) 。 C + + では、複数のモジュールで const 宣 ることは避けるべきで、さもないと予期せぬ振舞いをす る ( もちろん、そのようなコードの内部で定数の値を変え タを要求するコードでは、アドレス値を得ることもでき この定数は型カ鴃まっており、その値に対するポイン const 10 Ⅱ g Num—wombats = 7 ; の代わりに、次のように表すことカそきる。 関数名のオーパーロード C + + のすべての関数はプロトタイプをもつので、関数 名のオーパーロード ( 多重定義 ) の概念が導入されている。 これは、名前が同しでバラメータの異なる 2 つの関数を 区別するものである。たとえば、前出のインライン関数 abs() について、浮トれ点数を扱う刻重を作ることが できる。 inline double abs( return(d く 0 ? —d : d) ; double d UNIX MAGAZINE 1992.12 char *str, VOid print( 名を要求する表示関数のプロトタイプは次のようになる。 刎直を与えることかできるのだ。たとえば、出力先のパス ている引数 (trailing arguments) に対して、デフォルト るデフォルト引数という概念をもつ。コード中で省略され C + + は、本質的にはある種のオーバーロードともいえ デフォルト引数 乱してしまうだろう。 い。さもなければ、その関数を利用する人びとはすぐに混 は、その引数によって無理なく区別できなければならな 能力ヾ監用される危険性もある。オーバーロードされた名前 くなった。もちろん、ほかの多くの機能と同様に、この機 ように、引数の型名から関数を名付けて区別する必要がな このようなガ去により、 abs() 、 fabs() 、 dabs() の ことはできない ) 。 使うことかできる ( ただし、返り値の型で関数を区別する よって引数を区別できるかぎり、 1 つの関数名を何度でも 換し、またもとに戻す必要はなくなる。コンパイラが型に 加できるので、 float 型の変数をいったん double 型に変 をとるものを使う。さらに float 型をとるようなものを追 のを使い、 float あるいは double だったら、 double 型 0 平び出されたら、コンパイラは long 型の引数をとるも abs ( ) か整数型 (int 、 short 、 char 、あるいは long)
連載 C 十十 ADVISOR 丘 om UNIX R Ken Arnold 高性能な C としての C + + 私たちは、 C からの本質的な拡張部分を説明すること で、皆さんを C + + の世界にそっと案内しようと考えてい る。このようなアプローチのガ去が、なにかと掬義をかも すものであることは承知のうえだ。多くの人は、オプジェ クト指向の観点からみた特徴を述べることで、 C + + にア プローチしたはうがよいと考えている。しかし、 C + + が オプジェクト指向プログラミングにおけるもっとも現実 的な手段とされる理由の 1 つは、 C + + が C からの拡張 なので、すぐに利用できる点である。そして C のプログ ラマーにとって、その言語の世界に入り込むための一番 の遍首は、手続き型言語としての C + + の機能を学ぶこと である。次回のこのコラムでは、オプジェクト指向の深 淵に飛び込む予定だが、とりあえず今回は、あなたをそっ i + + ; / / increment i (duh! ) でのコメント文がある。 ます初めに、当田な据長ではあるが、 C + + には行末ま コメントとインライン関数 と水のなかに浸すだけにしよう。 C + + には C と同し形式のコメント文もあるので、 らでも好きなほうを使えばよい。 インライン関数 どち C + + には、かなり強化されたインライン関数が用意さ れている。多くの C プログラマーは、インライン関数を 実現するのにプリプロセッサ・マクロを利用していたが、 これには制限がある。各引数が 1 度だけ参照されるような UNIX MAGAZINE 1992.12 マクロを言 t することは難しいが、マクロの引数が単項演 算子、、 + + " を含む場合など、引数の参照が副作用をもつよ うなときにも、期待どおりの結果を得たいことがある。 たとえば、よく見かける次のようなマクロを考えてみ ABS(i + + ) ろう。 これを次のように呼び出すと、予期せぬ結果に驚くだ #define ABS(v) ((v) く 0 ? —(v) : (v)) る。 ン関数は、型の前にキーワード inline を付けるだけで 照をおこなう場合も副作用はない。このようなインライ 価されないことがイ焉正される。さらに、変数の書込みや参 C + + コンパイラでは、パラメータが最初の 1 度しか評 return(i く 0 ? —i:i); 1 ong i abs ( inline 10 Ⅱ g ライン関数として書くことができる。 C + + では、このようなマクロを次のような 1 つのイン たとえは、 定数 定義できる。 119 C + + は、定数の表現形式でもより柔軟な形式をもつ。
B00k Rev•ew 『 The UNIX Super Text 』 ( 上 ) TheUNIX Su 、 r 、 t 【 ・山口和紀盥彦 ・技術評論社 ・ B5 判、 638 ページ ・ 3 ′ 400 円 118 ・ Emacs による文書の編集 さて、どこがやるな〃と思わせたかというと、 第 5 部 X ウインドウシステム 第 4 部ちょっと賢い使い方 第 3 部初心者としての一般教養 第 2 部とにかく使いましよう 第 1 部コンピュータを使う前に ます、いつものとおり目次を載せておきましよう。 級編〃になるそうです。 は、文書処理やプログラミン久システム管理などの上 れていますが、今年の終りころに刊行される予定の下巻 かれています。上巻では、、 UNIX の入門編〃がカバーさ まで体系的に理解していけるテキスト」というふうに書 本の内容は、前書きの部分に「 UNIX の入門から管理 ほう、やるな〃という感しです。 、、むむっ ! 〃と思いながら開いてみると、その内容は、、は ware Design 』などの雑誌を発行しているところです。 ョンの情報というキャッチコピーがついた『 soft- と読みます ) や、いつのまにか、、 UNIX とワークステーシ ここは、えらく過激な内容の rThe BasiCJ ( 、、ザ・べ〃 取ってみると、版元はあの技術評論社ではないですか。 と、目立ちたがっている ( ! ? ) 本書をみつけました。手に ・ちょっとセンセーショナルなタイトル ・派手な表紙 ・分厚い ロしていると、 いつものように原稿のネタを求めて本屋さんをウロウ ・ Wnn(uum と Egg) による日本語の入力 ・ MH などによるメールの読み書き ・ネットワーク・ ニュースの言売み書き ・ X 端末の設定 など、雑誌の記事などではよくみかけるものの、 1 冊の 本になっていることは少ないトピックスがまとまってい るという点です。この本があれば、新人が入ってくるた びに本誌のバックナンバーを引っ張り出してきて、 「 Nemacs 入門」や「 Wnn 入門」を集める必要がなくな りますね。 本書が想定している読者は、 ・コンピュータにほとんど触れたことがない人から、あ る程度システムに慣れた人まで だそうです。また、、、 UNIX システム教育用のテキスト〃 として、 ・情幸財斗学・工学の理論と簡度しをするための知識 ・コンピュータを使ううえで必要な法律の知識やエチケ なども紹介されています。技術系の新入社員教育には十 分使えそうです。ざっと読んだところ、理工系の知識が あることを前提としているようなので、文系の人たちに はちょっとつらいかもしれせん。 最後に、本誌の筆者として一 こんな内容の本は、いっか書いてみたいと思っていた ( 編集長もいつか出版したいと思っていたらしい ) のです が、量の多さに負けてしまい、なかなか書く気になりま せんでした。でも、もう本書があるので、編集長の「ね え、書いてよー」攻撃から逃れられそうです ( え ? 「世の 中、そんな甘いもんやあらへん」て ? ) 。 ( 坂下秀 ASTEC) UNIX MAGAZINE 1992 ユ 2